//
//  NSMutableArray+ZXAvoidCrash.h
//  MerchantBusinessClient
//
//  Created by simon on 2020/9/2.
//  Copyright © 2020 com.Chs. All rights reserved.
//
//  注意：NSMutableArray的类是__NSArrayM且只有这个类，和NSArray不同；
//  2020.10.09 增加注释

#import <Foundation/Foundation.h>
#import "ZXAvoidCrashProtocol.h"

NS_ASSUME_NONNULL_BEGIN

@interface NSMutableArray (ZXAvoidCrash)<ZXAvoidCrashProtocol>

@end

NS_ASSUME_NONNULL_END

/**
*  一、会crash的初始化：初始化对象为空，返回nil；
* //使用父类NSArray的
*  1. NSArray的快速创建方式 NSArray *array = @[@"1", @"2"];  //这种创建方式其实调用的也是3中的方法；
*  2.+ (instancetype)arrayWithObjects:(const ObjectType _Nonnull [_Nonnull])objects count:(NSUInteger)cnt;
*  3.- (instancetype)initWithObjects:(const ObjectType _Nonnull [_Nullable])objects count:(NSUInteger)cnt;
*  4. + (instancetype)arrayWithObject:(ObjectType)anObject
 
* 二、会crash的method：索引越界，返回nil；
*（一）查询，
*  1.- (ObjectType)objectAtIndex:(NSUInteger)index; //返回nil;
*  2.- (ObjectType)objectAtIndexedSubscript:(NSUInteger)idx; //返回nil 包含（1）：多元素数组下标索引的方式访问 id value = array[3];
 //下面的使用父类NSArray的
*  3.- (NSArray<ObjectType> *)objectsAtIndexes:(NSIndexSet *)indexes;//返回nil
*  4.-(NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range;//返回NSNotFound
*  5.-(NSArray *)subarrayWithRange:(NSRange)range;//返回nil
*  6.- (NSArray<ObjectType> *)arrayByAddingObject:(ObjectType)anObject;//返回self
 
*（二）增加
*  1.增加某个对象:anObj=空的时候崩溃;不作处理
*  //会调用insertObject:atIndex:方法
 - (void)addObject:(ObjectType)anObject;
*  2.增加某个对象：//不作处理
 - (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index;
*  3.增加某组对象：//不作处理
 - (void)insertObjects:(NSArray<ObjectType> *)objects atIndexes:(NSIndexSet *)indexes;
*（三）删除
*  1.删除某个对象：//不作处理
*   - (void)removeObjectAtIndex:(NSUInteger)index;
*  2.删除某组范围的对象：//不作处理
 - (void)removeObjectsInRange:(NSRange)range;
*  3.删除某组索引的对象：//不作处理
 - (void)removeObjectsAtIndexes:(NSIndexSet *)indexes;
*  4.删除所有哈希值匹配项//range越界不作处理
 - (void)removeObject:(ObjectType)anObject inRange:(NSRange)range;
*  5.删除所有物理地址匹配项//range越界不作处理
 - (void)removeObjectIdenticalTo:(ObjectType)anObject inRange:(NSRange)range;
 
 *  不会崩溃：
 - (void)removeObject:(ObjectType)anObject
 - (void)removeObject:nil inRange:合法Range;
*/

///优点：补充了
///1.增加某组对象：//不作处理
/// - (void)insertObjects:(NSArray<ObjectType> *)objects atIndexes:(NSIndexSet *)indexes;
///2.删除某组范围的对象：//不作处理
///- (void)removeObjectsInRange:(NSRange)range;
///*  3.删除某组索引的对象：//不作处理
/// - (void)removeObjectsAtIndexes:(NSIndexSet *)indexes;
///*  4.删除所有哈希值匹配项//range越界不作处理
/// - (void)removeObject:(ObjectType)anObject inRange:(NSRange)range;
///*  5.删除所有物理地址匹配项//range越界不作处理
/// - (void)removeObjectIdenticalTo:(ObjectType)anObject inRange:(NSRange)range;
